MY TRAFFIC TEST

L'objectif de ce test est à partir des données fournies, l'identifiant du magasin , identifiant de l'appareil, date du ping, d'inferer les horaires d'ouverture des magasins.

Je cherche dans cet exercice à mettre en avant une méthode automatique viable pour n'importe quel magasin dans n'importe quelle situation à déterminer à partir des données disponible ses horaires d'ouverture.

Une premiere approche pourrait etre d'estimer par jour la distribution des pings au cours de la journée et définir un seuil d'acceptation cependant il est d'une part difficile de trouver automatiquement ce seuil d'acceptation pour chaque magasin et rien ne dit que choisir un seuil basé sur nos données se généralisera bien à d'autres magasins.

La méthode choisie est alors la suivante, je suppose que les arrivées des clients à chaque instant suivent une loi de poisson de paramètre inconnu. Ce parametre suit une loi continue en fonction du temps et dépend d'un paramètre correspondant à l'ouverture ou non du magasin, je vais donc chercher à detecter l'instant ou le paramètre change de loi c'est à dire "saut" dans les fréquences d'arrivées.

Pour ce faire je vais chercher deux instants t1 et t2 tel et calculer le MSE entre les observations o(t) et la fonction définie par f(t) =

mean(o(t) pour t < t1) si t < t1 | mean(o(t) pour t > t2) si t > t2 | mean(o(t) pour t > t1 et t< t2) t > t1 et t< t2 |

je fais referece à cette méthode par la "méthode des moyennes"

Tous les graphiques utilisent altair et sont interactif vous pouvez zoomer en "scrollant" déplacer le graphique en cliquant et tirant et vous pouvez selectionner le centre commercial en cliquant sur la légende.

Pour plus de confort j'ai "collapsé" les cellules les moins importantes j'utilise vs code j'espere que l'affichage sera bon de votre coté

PS: j'ai supprimé mes différents essais intermédiaires pour ne garder que l'essais final avec tout le preprocessing ect...

IMPORTS

DATASET

Visualisation des informations importantes

Sans surprise on remarque une périodicité sur 7 jours on peut également supposer que les jours avec moins de ping sont les dimanches. Dans un premier temps je vais chercher à éliminer les ping parasites c'est à dire ceux qui se manifestent sur une periode excessiverment longue ou ceux se manifestant sur une periode anormalement courte

On observe les valeurs des différents quantiles en minutes, ennormément de pings proviennent d'utilisateurs ayant été détectés moins de une seconde je vais donc en supprimer une partie, on ne supprime pas tout car l'antenne du centre ne couvre peut etre pas toute la zone géographique. On supprime également les personnes qui passent trop de temps dans le magasin il s'agit surement d'employés ou d'appareil autres.

un visiteur passe en moyenne 1 heure dans le centre commercial cela justifie ma décision précédente de supprimer les échantillons extremes

Je choisi donc de supprimer les utilisateurs passant moins de deux minutes et ceux passant plus de 4h30 dans les centre commerciaux

Pour automatiser ce paramètre il suffit de définir un pourcentage de donnée que l'on se permet d'abandonner et utiliser les quantiles correspondants

Je conserve maintenant uniquement les premier ping de chaque utilisateur pour detecter les arrivées

Maintenant que je suis en possession des arrivées je vais les aggreger sur des tranches de 30 min, (d'expérience les centres commerciaux ont souvent des horaires par tranche de 30 min ). Etant donné que j' observe pas d'anomalie graphiquement je peux raisonablement regrouper les données des différents jours de la semaine entre eux pour me ramener à une base de 7 jours.

Graphique des arrivées agrégées par jour

Graphique des arrivées sur une base de 7 jours je remarque enormément de variations brusques qui pourrait perturber mon algorithme. je choisi donc de rentre le signal moins "sharp" en applicant la méthode des moyenne mobiles.

Les données sont prêtes je vais pouvoir travailler.
1 je cherche à identifier les jours ou le centre est fermé je suppose que les nombre de ping moyen par jours suivent une loi normale et je considère comme férié les jours ayant un ping moyen inférieur au premier quartile

2 j'applique la méthode des moyennes définie en introduction et j'applique une régularization par rapport à la distance entre f(t) et la valeur théorique 0 pour t< t1 et t>t2 cela est nécéssaire car les distributions sont multimodale et donc l'algorithme peut se coincer entre deux mode le paramètre de régularisation ici est 0.4 on peut clairement l'optimiser

Les résultats sont assez mitigés le modèle est tres sensible au bruit il performe beaucoup moins bien sur les centres ayant le plus de bruit par exemple cb2d5bb6-c372-4a51-8231-4ffa288a0c28 ( le bruit est visible sur les jours férié) On pourrait se débarasser de ce bruit en estimant sa distribution en utilisant les donnes des jours fermés.